package com.ruoyi.web.service.impl;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.sign.Md5Utils;
import com.ruoyi.web.domain.Docker;
import com.ruoyi.web.mapper.DockerMapper;
import com.ruoyi.web.service.DockerService;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

/**
 * 【请填写功能名称】Service业务层处理
 *
 * @author ruoyi
 * @date 2022-03-06
 */
@Service
public class DockerServiceImpl implements DockerService
{

    // 令牌自定义标识
    @Value("${token.header}")
    private String header;

    // 令牌秘钥
    @Value("${token.secret}")
    private String secret;

    @Autowired
    private DockerService dockerService;

    @Autowired
    private DockerMapper dockerMapper;

    /**
     * 查询【请填写功能名称】
     *
     * @param id 【请填写功能名称】主键
     * @return 【请填写功能名称】
     */
    @Override
    public Docker selectDockerById(Integer id)
    {
        return dockerMapper.selectDockerById(id);
    }

    /**
     * 查询【请填写功能名称】列表
     *
     * @param docker 【请填写功能名称】
     * @return 【请填写功能名称】
     */
    @Override
    public List<Docker> selectDockerList(Docker docker)
    {
        return dockerMapper.selectDockerList(docker);
    }

    /**
     * 新增【请填写功能名称】
     *
     * @param docker 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int insertDocker(Docker docker)
    {
        //TODO 判断手机号格式是否正确
        //开发阶段不判断手机格式

        //密码加密
        String password = docker.getPassword();
        String Md5Password = Md5Utils.hash(password);
        docker.setPassword(Md5Password);

        docker.setCreateTime(DateUtils.getNowDate());
        return dockerMapper.insertDocker(docker);
    }

    /**
     * 修改【请填写功能名称】
     *
     * @param docker 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int updateDocker(Docker docker)
    {
        return dockerMapper.updateDocker(docker);
    }

    /**
     * 批量删除【请填写功能名称】
     *
     * @param ids 需要删除的【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteDockerByIds(Integer[] ids)
    {
        return dockerMapper.deleteDockerByIds(ids);
    }

    /**
     * 删除【请填写功能名称】信息
     *
     * @param id 【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteDockerById(Integer id)
    {
        return dockerMapper.deleteDockerById(id);
    }

    @Override
    public Docker selectDockerByPhoneNumber(String phonenumber) {
        //TODO 验证手机号码格式是否正确

        Docker docker = dockerMapper.selectDockerByPhoneNumber(phonenumber);
        return docker;
    }

    @Override
    public boolean verification(Docker docker) {
        String password = docker.getPassword();
        String phonenumber = docker.getPhonenumber();

        Docker dockerByPhoneNumber = dockerService.selectDockerByPhoneNumber(phonenumber);
        if (dockerByPhoneNumber == null){
            return false;
        }

        String dockerByPhoneNumberPassword = dockerByPhoneNumber.getPassword();
        String hash = Md5Utils.hash(password);
        if (!hash.equals(dockerByPhoneNumberPassword)){
            return false;
        }

        return true;
    }

    @Override
    public String createToken(Docker docker) {
        Map<String,Object> claims = new HashMap<>();
        claims.put(Constants.LOGIN_USER_KEY,docker);

        String token = Jwts.builder()
                .setClaims(claims)
                .setExpiration(new Date(System.currentTimeMillis()+24*60*60*1000))
                .signWith(SignatureAlgorithm.HS512, secret).compact();
        return token;
    }
}

